Liteserver Node
Bu makaleden önce Tam Düğüm
hakkında bilgi edinin
Bir uç nokta tam düğümde etkinleştirildiğinde, düğüm bir Liteserver rolünü üstlenir. Bu düğüm türü, Lite Clients'tan gelen talepleri karşılayabilir ve yanıt verebilir, TON Blockchain ile kesintisiz etkileşimi sağlar.
Donanım gereksinimleri
Bir doğrulayıcı
ile karşılaştırıldığında, liteserver modu daha az kaynak gerektirir. Ancak, bir liteserver çalıştırmak için güçlü bir makine kullanılması önerilir.
- en az 16 çekirdekli CPU
- en az 128 GB RAM
- en az 1TB NVMe SSD VEYA 64+k IOPS depolama
- 1 Gbit/s ağ bağlantısı
- yüksek yükte 16 TB/ay trafik
- genel IP adresi (sabit IP adresi)
Önerilen Sağlayıcılar
Önerilen Sağlayıcılar
bölümünde listelenen bulut sağlayıcılarını kullanabilirsiniz.
Hetzner ve OVH, bir doğrulayıcı çalıştırmak için yasaklanmıştır, ancak bir liteserver çalıştırmak için bunları kullanabilirsiniz:
- Hetzner: EX101, AX102
- OVH: RISE-4
Liteserver'in kurulumu
Eğer mytonctrl'unuz yoksa, -m liteserver
bayrağı ile kurun:
wget https://raw.githubusercontent.com/ton-blockchain/mytonctrl/master/scripts/install.sh
sudo bash ./install.sh -m liteserver
wget https://raw.githubusercontent.com/ton-blockchain/mytonctrl/master/scripts/install.sh
su root -c 'bash ./install.sh -m liteserver'
-d
- mytonctrl en son blockchain durumunun bir dump dosyasını indirecek. Bu, senkronizasyon süresini birkaç kat azaltacaktır.-c
- Senkronizasyon için genel olmayan liteserver'lar kullanmak istiyorsanız. (zorunlu değil)-i
- Minimum gereksinimleri göz ardı et, sadece gerçek düğüm kullanımı olmadan derleme sürecini kontrol etmek istiyorsanız kullanın.-m
- Mod,doğrulayıcı
veyaliteserver
olabilir.
Testnet'i kullanmak için, -c
bayrağı https://ton.org/testnet-global.config.json
değeri ile sağlanmalıdır.
Varsayılan -c
bayrağı değeri https://ton-blockchain.github.io/global.config.json
olup, varsayılan ana ağ yapılandırmasıdır.
Eğer mytonctrl'unuz zaten kuruluysa, çalıştırın:
user@system:~# mytonctrl
MyTonCtrl> enable_mode liteserver
Firewall ayarlarını kontrol et
Öncelikle, /var/ton-work/db/config.json
dosyanızda belirtilen Liteserver portunu doğrulayın. Bu port, her yeni MyTonCtrl
kurulumuyla birlikte değişir. port
alanında yer almaktadır:
{
...
"liteservers": [
{
"ip": 1605600994,
"port": LITESERVER_PORT
...
}
]
}
Eğer bir bulut sağlayıcı kullanıyorsanız, bu portu güvenlik duvarı ayarlarında açmanız gerekir. Örneğin, AWS kullanıyorsanız, portu güvenlik grubunda açmanız gerekir.
Aşağıda, bare metal sunucu güvenlik duvarında bir port açmanın örneği bulunmaktadır.
Güvenlik Duvarında Bir Port Açma
ufw
yardımcı programını kullanacağız (kısa not). Tercih ettiğinizi kullanabilirsiniz.
- Yüklü değilse
ufw
'yi kurun:
sudo apt update
sudo apt install ufw
- ssh bağlantılarına izin verin:
sudo ufw allow ssh
config.json
dosyasında belirtilen portu açın:
sudo ufw allow <port>
- Güvenlik duvarını etkinleştirin:
sudo ufw enable
- Güvenlik duvarı durumunu kontrol edin:
sudo ufw status
Bu şekilde, sunucunuzun güvenlik duvarı ayarlarında portu açabilirsiniz.
Liteserver ile Etkileşim (lite-client)
- Bilgisayarınızda boş bir proje oluşturun ve
config.json
dosyasını proje klasörüne yapıştırın. Bu yapılandırmayı elde etmek için aşağıdaki komutu kullanın:installer clcf # mytonctrl içinde
Bu, mytonctrl'un kurulu olduğu makinede/usr/bin/ton/local.config.json
dosyasını oluşturacaktır. Daha fazla bilgi içinmytonctrl belgelerini kontrol edin
.
- Kütüphaneleri yükleyin.
npm i --save ton-core ton-lite-
pip install pytonlib
go get github.com/xssnick/tonutils-go
go get github.com/xssnick/tonutils-go/lite
go get github.com/xssnick/tonutils-go/ton
- Bir başlatın ve liteserver'ın çalıştığından emin olmak için masterchain bilgisi talep edin.
Proje türünü module
olarak değiştirin package.json
dosyanızda:
{
"type": "module"
}
index.js
dosyasını aşağıdaki içerik ile oluşturun:
import { LiteSingleEngine } from 'ton-lite-/dist/engines/single.js'
import { LiteRoundRobinEngine } from 'ton-lite-/dist/engines/roundRobin.js'
import { Lite } from 'ton-lite-/dist/.js'
import config from './config.json' assert {type: 'json'};
function intToIP(int ) {
var part1 = int & 255;
var part2 = ((int >> 8) & 255);
var part3 = ((int >> 16) & 255);
var part4 = ((int >> 24) & 255);
return part4 + "." + part3 + "." + part2 + "." + part1;
}
let server = config.liteservers[0];
async function main() {
const engines = [];
engines.push(new LiteSingleEngine({
host: `tcp://${intToIP(server.ip)}:${server.port}`,
publicKey: Buffer.from(server.id.key, 'base64'),
}));
const engine = new LiteRoundRobinEngine(engines);
const = new Lite({ engine });
const master = await .getMasterchainInfo()
console.log('master', master)
}
main()
from pytoniq import LiteClient
async def main():
client = LiteClient.from_mainnet_config( # ana ağa, test ağı veya özel yapılandırma sözlüğü seçin
ls_i=0, # yapılandırmadan liteserver'ın dizini
trust_level=2, # liteserver için güven seviyesi
timeout=15 # timeout, pytonlib'de anahtar blok senkronizasyonunu içermez
)
await client.connect()
await client.get_masterchain_info()
await client.reconnect() # herhangi bir hata aldıysa mevcut bir nesneye yeniden bağlanabilir
await client.close()
"""ya da bunu bağlam yöneticisi ile kullanın: """
async with LiteClient.from_mainnet_config(ls_i=0, trust_level=2, timeout=15) as client:
await client.get_masterchain_info()
package main
import (
"context"
"encoding/json"
"io/ioutil"
"log"
"github.com/xssnick/tonutils-go/liteclient"
"github.com/xssnick/tonutils-go/ton"
)
func main() {
client := liteclient.NewConnectionPool()
content, err := ioutil.ReadFile("./config.json")
if err != nil {
log.Fatal("Dosya açma hatası: ", err)
}
config := liteclient.GlobalConfig{}
err = json.Unmarshal(content, &config)
if err != nil {
log.Fatal("Unmarshal() sırasında hata: ", err)
}
err = client.AddConnectionsFromConfig(context.Background(), &config)
if err != nil {
log.Fatalln("bağlantı hatası: ", err.Error())
return
}
// ton API liteserver bağlantı sargısını başlat
api := ton.NewAPIClient(client)
master, err := api.GetMasterchainInfo(context.Background())
if err != nil {
log.Fatalln("masterchain bilgisi alma hatası: ", err.Error())
return
}
log.Println(master)
}
- Artık kendi liteserver'ınızla etkileşimde bulunabilirsiniz.